package com.hui.testQuartz;

import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import java.util.Date;

/**
 * 用户代码定义在JOB中的execute方法内
 * <p>
 *
 * @JobDataMap 如果你使用的是持久化的存储机制（本教程的JobStore部分会讲到），在决定JobDataMap中存放什么数据的时
 * 候需要小心，因为JobDataMap中存储的对象都会被序列化，因此很可能会导致类的版本不一致的问题；Java的标准类型都很安
 * 全，如果你已经有了一个类的序列化后的实例，某个时候，别人修改了该类的定义，此时你需要确保对类的修改没有破坏兼容性；
 * 更多细节，参考现实中的序列化问题。另外，你也可以配置JDBC-JobStore和JobDataMap，使得map中仅允许存储基本类型和
 * String类型的数据，这样可以避免后续的序列化问题。
 * <p>
 * Quartz,每次执行job,job永远是全新的对象,但是，如果job实现org.quartz.StatefulJob接口,而不是job接口.
 * 此时JobDetail的JobDataMap将会共享一个对象。
 * @注意: 当实现有状态接口, StatefulJob时, 只有JobDetail的JobDataMap是共用的, 其他的，比如,Job本身,Trigger等,仍然每次执行
 * 的时候是全新的对象。所以,只有JobDetail的JobDataMap是共用的，其他的trigger.getJobDataMap(),context.getMergedJobDataMap(),
 * 等这些JobDataMap，任然是全新的
 * </p>
 */
public class HelloQuartz implements Job {
    public void execute(JobExecutionContext context) throws JobExecutionException {
        JobDetail detail = context.getJobDetail();
        String name = detail.getJobDataMap().getString("name");
        System.out.println("say hello to " + name + " at " + new Date());
    }
}